<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 高级函数

        // 函数可以作为一个函数的参数 

        // 函数可以作为一个函数的返回值  

        // 函数内可以调用另外一个函数  


        // function fn1(fn){
        //     console.log('我是fn1');
        //     fn();
        //     console.log('我还是fn1');

        // }


        // function test1(){
        //     console.log('我是test函数');
        // }

        // fn1(test1);


        // test1就是 fn1的回调函数  
        // 回调函数   callback 
        // 把一个函数a 当做实参传给  函数b中  
        // 在函数b中 以形参的方式 调用 函数a  
        // 函数a 就是函数b的回调函数  


        // 作用: 
        //  封装异步代码用  重点  

        // 同步   
        // 技术上的同步  等于生活中的 异步  事情一件件的做 
        // 异步  
        // 技术上的异步  等于生活中的同步  多件事情一起做 

        // 异步代码有哪些  定时器  


        // 让福祥 去一趟便利蜂 
        function fuxiang(fn){
            const time = Math.floor(Math.random()*4001+1000);
            setTimeout(()=>{
                console.log('---------------------');
                console.log('到了便利蜂');
                console.log('买到东西');
                // 按照朋友的指示进行 
                fn && fn(time) ;  // 左边为true 才会判断 右边 是否为true 
                console.log('回来了');
                console.log('耗时',time)
                console.log('---------------------');


            },time)
        }

        // fuxiang();

        // 夏雨荷 饮料 杜乃强 面包  朱一凡 水果 魏鑫蕊 牛奶  都让福祥 带东西  


        // fuxiang(function(res){ console.log('饮料',res)})
        // fuxiang(function(res){ console.log('面包',res)})
        // fuxiang(function(res){ console.log('水果',res)})
        // fuxiang(function(res){ console.log('牛奶',res)})

    </script>
</body>
</html>